{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from scipy import stats\n",
    "from datetime import datetime\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\", category=DeprecationWarning)\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "data=pd.read_csv(\"./day.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.344167</td>\n",
       "      <td>0.363625</td>\n",
       "      <td>0.805833</td>\n",
       "      <td>0.160446</td>\n",
       "      <td>331</td>\n",
       "      <td>654</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-02</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>0.363478</td>\n",
       "      <td>0.353739</td>\n",
       "      <td>0.696087</td>\n",
       "      <td>0.248539</td>\n",
       "      <td>131</td>\n",
       "      <td>670</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-03</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.196364</td>\n",
       "      <td>0.189405</td>\n",
       "      <td>0.437273</td>\n",
       "      <td>0.248309</td>\n",
       "      <td>120</td>\n",
       "      <td>1229</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-04</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.212122</td>\n",
       "      <td>0.590435</td>\n",
       "      <td>0.160296</td>\n",
       "      <td>108</td>\n",
       "      <td>1454</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-05</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0.226957</td>\n",
       "      <td>0.229270</td>\n",
       "      <td>0.436957</td>\n",
       "      <td>0.186900</td>\n",
       "      <td>82</td>\n",
       "      <td>1518</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1        0        6           0   \n",
       "1        2  2011-01-02       1   0     1        0        0           0   \n",
       "2        3  2011-01-03       1   0     1        0        1           1   \n",
       "3        4  2011-01-04       1   0     1        0        2           1   \n",
       "4        5  2011-01-05       1   0     1        0        3           1   \n",
       "\n",
       "   weathersit      temp     atemp       hum  windspeed  casual  registered  \\\n",
       "0           2  0.344167  0.363625  0.805833   0.160446     331         654   \n",
       "1           2  0.363478  0.353739  0.696087   0.248539     131         670   \n",
       "2           1  0.196364  0.189405  0.437273   0.248309     120        1229   \n",
       "3           1  0.200000  0.212122  0.590435   0.160296     108        1454   \n",
       "4           1  0.226957  0.229270  0.436957   0.186900      82        1518   \n",
       "\n",
       "    cnt  \n",
       "0   985  \n",
       "1   801  \n",
       "2  1349  \n",
       "3  1562  \n",
       "4  1600  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 731 entries, 0 to 730\n",
      "Data columns (total 16 columns):\n",
      "instant       731 non-null int64\n",
      "dteday        731 non-null object\n",
      "season        731 non-null int64\n",
      "yr            731 non-null int64\n",
      "mnth          731 non-null int64\n",
      "holiday       731 non-null int64\n",
      "weekday       731 non-null int64\n",
      "workingday    731 non-null int64\n",
      "weathersit    731 non-null int64\n",
      "temp          731 non-null float64\n",
      "atemp         731 non-null float64\n",
      "hum           731 non-null float64\n",
      "windspeed     731 non-null float64\n",
      "casual        731 non-null int64\n",
      "registered    731 non-null int64\n",
      "cnt           731 non-null int64\n",
      "dtypes: float64(4), int64(11), object(1)\n",
      "memory usage: 91.5+ KB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "      <td>731.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>2.496580</td>\n",
       "      <td>0.500684</td>\n",
       "      <td>6.519836</td>\n",
       "      <td>0.028728</td>\n",
       "      <td>2.997264</td>\n",
       "      <td>0.683995</td>\n",
       "      <td>1.395349</td>\n",
       "      <td>0.495385</td>\n",
       "      <td>0.474354</td>\n",
       "      <td>0.627894</td>\n",
       "      <td>0.190486</td>\n",
       "      <td>848.176471</td>\n",
       "      <td>3656.172367</td>\n",
       "      <td>4504.348837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>211.165812</td>\n",
       "      <td>1.110807</td>\n",
       "      <td>0.500342</td>\n",
       "      <td>3.451913</td>\n",
       "      <td>0.167155</td>\n",
       "      <td>2.004787</td>\n",
       "      <td>0.465233</td>\n",
       "      <td>0.544894</td>\n",
       "      <td>0.183051</td>\n",
       "      <td>0.162961</td>\n",
       "      <td>0.142429</td>\n",
       "      <td>0.077498</td>\n",
       "      <td>686.622488</td>\n",
       "      <td>1560.256377</td>\n",
       "      <td>1937.211452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.059130</td>\n",
       "      <td>0.079070</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.022392</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>22.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>183.500000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.337083</td>\n",
       "      <td>0.337842</td>\n",
       "      <td>0.520000</td>\n",
       "      <td>0.134950</td>\n",
       "      <td>315.500000</td>\n",
       "      <td>2497.000000</td>\n",
       "      <td>3152.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>366.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.498333</td>\n",
       "      <td>0.486733</td>\n",
       "      <td>0.626667</td>\n",
       "      <td>0.180975</td>\n",
       "      <td>713.000000</td>\n",
       "      <td>3662.000000</td>\n",
       "      <td>4548.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>548.500000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>0.655417</td>\n",
       "      <td>0.608602</td>\n",
       "      <td>0.730209</td>\n",
       "      <td>0.233214</td>\n",
       "      <td>1096.000000</td>\n",
       "      <td>4776.500000</td>\n",
       "      <td>5956.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>731.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>0.861667</td>\n",
       "      <td>0.840896</td>\n",
       "      <td>0.972500</td>\n",
       "      <td>0.507463</td>\n",
       "      <td>3410.000000</td>\n",
       "      <td>6946.000000</td>\n",
       "      <td>8714.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          instant      season          yr        mnth     holiday     weekday  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean   366.000000    2.496580    0.500684    6.519836    0.028728    2.997264   \n",
       "std    211.165812    1.110807    0.500342    3.451913    0.167155    2.004787   \n",
       "min      1.000000    1.000000    0.000000    1.000000    0.000000    0.000000   \n",
       "25%    183.500000    2.000000    0.000000    4.000000    0.000000    1.000000   \n",
       "50%    366.000000    3.000000    1.000000    7.000000    0.000000    3.000000   \n",
       "75%    548.500000    3.000000    1.000000   10.000000    0.000000    5.000000   \n",
       "max    731.000000    4.000000    1.000000   12.000000    1.000000    6.000000   \n",
       "\n",
       "       workingday  weathersit        temp       atemp         hum   windspeed  \\\n",
       "count  731.000000  731.000000  731.000000  731.000000  731.000000  731.000000   \n",
       "mean     0.683995    1.395349    0.495385    0.474354    0.627894    0.190486   \n",
       "std      0.465233    0.544894    0.183051    0.162961    0.142429    0.077498   \n",
       "min      0.000000    1.000000    0.059130    0.079070    0.000000    0.022392   \n",
       "25%      0.000000    1.000000    0.337083    0.337842    0.520000    0.134950   \n",
       "50%      1.000000    1.000000    0.498333    0.486733    0.626667    0.180975   \n",
       "75%      1.000000    2.000000    0.655417    0.608602    0.730209    0.233214   \n",
       "max      1.000000    3.000000    0.861667    0.840896    0.972500    0.507463   \n",
       "\n",
       "            casual   registered          cnt  \n",
       "count   731.000000   731.000000   731.000000  \n",
       "mean    848.176471  3656.172367  4504.348837  \n",
       "std     686.622488  1560.256377  1937.211452  \n",
       "min       2.000000    20.000000    22.000000  \n",
       "25%     315.500000  2497.000000  3152.000000  \n",
       "50%     713.000000  3662.000000  4548.000000  \n",
       "75%    1096.000000  4776.500000  5956.000000  \n",
       "max    3410.000000  6946.000000  8714.000000  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 对数值型特征进行数学统计，如果要对所有特征进行统计展示，可以使用data.describe(include=0)\n",
    "data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "data['dteday']=pd.to_datetime(data['dteday'])# 把object型转换为标准的日期格式，可以方便地提取里面的日期、时间等信息。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 对连续型特征，可以用哪个函数可视化其分布？（给出你最常用的一个即可），并根据代码运行结果给出示例。（10分） "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x26233d4cac8>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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zOwQUDPla/zYOTcMDJvZY4QH5B9FKb+IiJ992MzeHHl/KeHxeapbgG3Ac2YGkA60RW4bA34Zef8QMOqcG59mDH/YOdcJYGb3E54s2bPA1yECqIgWfzHgH5xzX3rRB8N906NTPhSa8u8QL/49uHiRgBYNiIjMk5m9ArgVuM45N2RmjwNpF98N+Lpz7qPTfIlx99tFXC+M4c65kJlpDBdPqJ1D4l0/kB15/0HgvWaWBWBmFWa2ZJZf7w4zSzOzQuAVwHMLllREJHHlAt2RAnotsDPy8XEzS468/yhw54Vx28wKzKx6lo/zqsjnpQNvAn6zEOFFpqOZaIlrzrnOyALBw8AvgPuAXZGXAgeAdxDuq5upZ4GfAVXA3znnmhY4sohIIvol8AEzOwgcB56JfPxe4KCZPR/pi/6fwENmFgDGgQ8B52fxOL8Gvkl4Hcx9zjm1csii0RZ3IhFm9nFgwDn3L15nERGR2TGzdwPbnXN/5HUWSQxq5xARERERmSXNRIuIiIiIzJJmokVEREREZklFtIiIiIjILKmIFhERERGZJRXRIiIiIiKzpCJaRERERGSWVESLiIiIiMySimgRERERkVlSES0iIiIiMksqokVEREREZklFtIiIiIjILKmIFhERERGZJRXRIiIiIiKzpCJaRERERGSWVESLiIiIiMySimgRERERkVlSES0iIiIiMksqokVEREREZklFtIiIiIjILCV5HWA6RUVFrqamxusYIiKztnfv3g7nXLHXOaJJY7aIxKv5jNkxWUTX1NSwZ88er2OIiMyamZ33OkO0acwWkXg1nzFb7RwiIiIiIrOkIlpEREREZJZURIuIiIiIzJKKaBERERGRWVIRLSIiIiIySyqiRURERERmSUW0iIiIiMgsqYgWEREREZklFdEiIiIiIrM05xMLzWwp8A2gFAgB9zrnPnPRfV4B/Bg4G/nQ/c65T8z1MUVm477ddTO+79t3VC1iEhGR2DKT8VHjosjlzefY7wngz51zz5tZNrDXzB52zh296H5POedeP4/HERERERGJKXNu53DONTvnno+83w/UAhULFUxEREREJFbNZyb6BWZWA2wFdk9z83VmdgBoAv7COXdkIR5TxE/UeiIiV6IWDJHYMu8i2syygB8AH3HO9V108/NAtXNuwMxuB34ErLrE17kHuAegqkqDgIiIiIjErnnt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USfYfqUxpsEYUwXUAct967f68bNKKRXJ8oDZIpIAtOHtfJiDt7DuXkQf0zaLSBKQbIxZ5Vv/TJft1wL3i8h9wEhjTItv/UFjzMe+5cV4C/YJeDtE3hWRfOC/gGwRiQdOB17yrf8LkOH72TOAJT08r1J9omOiVThp67LcCcQAbj5/sxh9nO09Xb73oP8bSinVK2NMh2943M3AGmALsAAYCxR027yntlkA08tjPycinwBfBN4WkW8AxT1sb3yPs717b7aIJAK1vt7sHp/muL+gUn7QnmgV7vYBs33LiyzMoZRS4WY13mESq/H2Pt8K5BtjTligGmNqgToROdO36itH7xORMUCxMeaPwDIg13fXCBE5WixfB3wEFAFpR9eLiFNEphhj6oG9IvIl33oRkem+n/0YuLb78yrVV1pEq3D3O+A2EVkDpFodRimlwsiHeIdIrDXGVACtHDuU43huBh71nVjY0mX9NcA23zCMicDTvvUFwI0isgUYgndcczveDpLfiMhmIB/vMA7wFsi3+NZvB670rb8HuENENgBJffmFlepK/HjDqJRSSillGREZBbxujJlqcRSlPqM90UoppZRSSvWR9kQrpZRSSinVR9oTrZRSSimlVB9pEa2UUkoppVQfaRGtlFJKKaVUH2kRrZRSSimlVB9pEa2UUkoppVQfaRGtlFJKKaVUH/0fcMQI8dOv9pEAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 864x720 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 对于连续性特征可以使用sns.dist函数进行展示其分布情况,代码简单，实现的功能多。\n",
    "fig,axis=plt.subplots(nrows=2,ncols=2)# 给定一个2行2列的布局\n",
    "fig.set_size_inches(12, 10)# 设置画图域的大小\n",
    "numerical_features = ['temp','atemp','hum','windspeed']\n",
    "sns.distplot(data['temp'],ax=axis[0][0])\n",
    "sns.distplot(data['atemp'],ax=axis[0][1])\n",
    "sns.distplot(data['hum'],ax=axis[1][0])\n",
    "sns.distplot(data['windspeed'],ax=axis[1][1])\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. 对两个连续型特征，可以用哪个函数得到这两个特征之间的相关性？根据代码运行结果，给出示例。（10分）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'atemp')"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 对于两个连续型变量，可以用plt.scatter函数来得到连个连续性特征的相关性。\n",
    "x=data.temp\n",
    "y=data.atemp\n",
    "plt.scatter(x,y)\n",
    "plt.xlabel('temp')\n",
    "plt.ylabel('atemp')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上图可以看出，temp和atemp这两个变量呈现正相关的规律。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. 如果发现特征之间有较强的相关性，在选择线性回归模型时应该采取什么措施。（10分）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "比如上面，temp和atemp这两个特征的相关性很强，在选择回归模型前可以选择降维，也可以在这两个特征之间选择一个进行建模，去除特征之间的相关性。\n",
    "\n",
    "因为在使用最小二乘求解的时候，需要对特征矩阵求逆，而能够求逆的条件是特征矩阵的行或列之间是线性无关的情况。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. 当采用带正则的模型以及采用随机梯度下降优化算法时，需要对输入（连续型）特征进行去量纲预处理。课程代码给出了用标准化（StandardScaler）的结果，请改成最小最大缩放（MinMaxScaler）去量纲 （10分），并重新训练最小二乘线性回归、岭回归、和Lasso模型（30分）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>B</th>\n",
       "      <th>LSTAT</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.18</td>\n",
       "      <td>0.067815</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.577505</td>\n",
       "      <td>0.641607</td>\n",
       "      <td>0.269203</td>\n",
       "      <td>0.208015</td>\n",
       "      <td>0.3</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.089680</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.547998</td>\n",
       "      <td>0.782698</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.204470</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.694386</td>\n",
       "      <td>0.599382</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>0.989737</td>\n",
       "      <td>0.063466</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000293</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.658555</td>\n",
       "      <td>0.441813</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>0.994276</td>\n",
       "      <td>0.033389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000705</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.687105</td>\n",
       "      <td>0.528321</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.099338</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       CRIM    ZN     INDUS  CHAS       NOX        RM       AGE       DIS  \\\n",
       "0  0.000000  0.18  0.067815   0.0  0.314815  0.577505  0.641607  0.269203   \n",
       "1  0.000236  0.00  0.242302   0.0  0.172840  0.547998  0.782698  0.348962   \n",
       "2  0.000236  0.00  0.242302   0.0  0.172840  0.694386  0.599382  0.348962   \n",
       "3  0.000293  0.00  0.063050   0.0  0.150206  0.658555  0.441813  0.448545   \n",
       "4  0.000705  0.00  0.063050   0.0  0.150206  0.687105  0.528321  0.448545   \n",
       "\n",
       "        TAX  PTRATIO         B     LSTAT  \n",
       "0  0.208015      0.3  1.000000  0.089680  \n",
       "1  0.104962      0.5  1.000000  0.204470  \n",
       "2  0.104962      0.5  0.989737  0.063466  \n",
       "3  0.066794      0.6  0.994276  0.033389  \n",
       "4  0.066794      0.6  1.000000  0.099338  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "scaler=MinMaxScaler()\n",
    "df = pd.read_csv(\"./boston_housing.csv\")\n",
    "y = df['MEDV']\n",
    "X = df.drop('MEDV', axis = 1)\n",
    "feat_names = X.columns\n",
    "log_y = np.log1p(y)\n",
    "X[\"RAD\"].astype(\"object\")\n",
    "X_cat = X[\"RAD\"]\n",
    "X_cat = pd.get_dummies(X_cat, prefix=\"RAD\")\n",
    "X= X.drop(\"RAD\", axis = 1)\n",
    "X = scaler.fit_transform(X)# 对训练数据，先调用fit方法训练模型，得到模型参数；然后对训练数据和测试数据进行transform\n",
    "#columns=['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'TAX','PTRATIO', 'B', 'LSTAT']\n",
    "fe_data = pd.DataFrame(data = X, columns = feat_names.drop(\"RAD\"), index = df.index)#  feat_names.drop(\"RAD\")\n",
    "fe_data.head()\n",
    "# 小例子\n",
    "#x = np.array([[-1, 2], [-0.5, 6], [0, 10], [1, 18]])\n",
    "#y=  np.dot(x, np.array([1, 2])) + 3\n",
    "#scaler=MinMaxScaler()# 实例化对象\n",
    "#print(scaler.fit(x))# 训练数据\n",
    "#print('........................')\n",
    "#print(scaler.data_max_)# 数据中最大的一个样本\n",
    "#print('........................')\n",
    "#print(scaler.transform(x))# 归一化数据的结果\n",
    "#print('........................')\n",
    "#x_MinMax=scaler.transform(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>CRIM</th>\n",
       "      <th>ZN</th>\n",
       "      <th>INDUS</th>\n",
       "      <th>CHAS</th>\n",
       "      <th>NOX</th>\n",
       "      <th>RM</th>\n",
       "      <th>AGE</th>\n",
       "      <th>DIS</th>\n",
       "      <th>TAX</th>\n",
       "      <th>PTRATIO</th>\n",
       "      <th>...</th>\n",
       "      <th>RAD_1</th>\n",
       "      <th>RAD_2</th>\n",
       "      <th>RAD_3</th>\n",
       "      <th>RAD_4</th>\n",
       "      <th>RAD_5</th>\n",
       "      <th>RAD_6</th>\n",
       "      <th>RAD_7</th>\n",
       "      <th>RAD_8</th>\n",
       "      <th>RAD_24</th>\n",
       "      <th>log_MEDV</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.18</td>\n",
       "      <td>0.067815</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.314815</td>\n",
       "      <td>0.577505</td>\n",
       "      <td>0.641607</td>\n",
       "      <td>0.269203</td>\n",
       "      <td>0.208015</td>\n",
       "      <td>0.3</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.218876</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.547998</td>\n",
       "      <td>0.782698</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.117950</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.000236</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.242302</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.172840</td>\n",
       "      <td>0.694386</td>\n",
       "      <td>0.599382</td>\n",
       "      <td>0.348962</td>\n",
       "      <td>0.104962</td>\n",
       "      <td>0.5</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.575151</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.000293</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.658555</td>\n",
       "      <td>0.441813</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.538057</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.000705</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.063050</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.150206</td>\n",
       "      <td>0.687105</td>\n",
       "      <td>0.528321</td>\n",
       "      <td>0.448545</td>\n",
       "      <td>0.066794</td>\n",
       "      <td>0.6</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>3.616309</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       CRIM    ZN     INDUS  CHAS       NOX        RM       AGE       DIS  \\\n",
       "0  0.000000  0.18  0.067815   0.0  0.314815  0.577505  0.641607  0.269203   \n",
       "1  0.000236  0.00  0.242302   0.0  0.172840  0.547998  0.782698  0.348962   \n",
       "2  0.000236  0.00  0.242302   0.0  0.172840  0.694386  0.599382  0.348962   \n",
       "3  0.000293  0.00  0.063050   0.0  0.150206  0.658555  0.441813  0.448545   \n",
       "4  0.000705  0.00  0.063050   0.0  0.150206  0.687105  0.528321  0.448545   \n",
       "\n",
       "        TAX  PTRATIO  ...  RAD_1  RAD_2  RAD_3  RAD_4  RAD_5  RAD_6  RAD_7  \\\n",
       "0  0.208015      0.3  ...      1      0      0      0      0      0      0   \n",
       "1  0.104962      0.5  ...      0      1      0      0      0      0      0   \n",
       "2  0.104962      0.5  ...      0      1      0      0      0      0      0   \n",
       "3  0.066794      0.6  ...      0      0      1      0      0      0      0   \n",
       "4  0.066794      0.6  ...      0      0      1      0      0      0      0   \n",
       "\n",
       "   RAD_8  RAD_24  log_MEDV  \n",
       "0      0       0  3.218876  \n",
       "1      0       0  3.117950  \n",
       "2      0       0  3.575151  \n",
       "3      0       0  3.538057  \n",
       "4      0       0  3.616309  \n",
       "\n",
       "[5 rows x 22 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fe_data = pd.concat([fe_data, X_cat], axis = 1, ignore_index=False)\n",
    "fe_data[\"log_MEDV\"] = log_y\n",
    "fe_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(404, 21)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "x_MinMax=fe_data.drop(\"log_MEDV\",axis=1)\n",
    "y=fe_data['log_MEDV']\n",
    "X_train, X_test, y_train, y_test = train_test_split(x_MinMax, y, random_state=33, test_size=0.2)\n",
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LinearRegression on train is 0.8112010417433881\n",
      "The r2 score of LinearRegression on test is 0.708305459026543\n"
     ]
    }
   ],
   "source": [
    "# 线性回归\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.metrics import r2_score\n",
    "reg=LinearRegression()# 实例化机器学习模型\n",
    "reg_fit=reg.fit(X_train,y_train)# 用训练数据训练模型参数\n",
    "# 用训练好的模型对测试集进行预测\n",
    "y_test_pred_lr = reg.predict(X_test)\n",
    "y_train_pred_lr = reg.predict(X_train)\n",
    "# 使用r2_score评价模型在测试集和训练集上的性能，并输出评估结果\n",
    "# 训练集\n",
    "print ('The r2 score of LinearRegression on train is', r2_score(y_train, y_train_pred_lr))\n",
    "# 测试集\n",
    "print( 'The r2 score of LinearRegression on test is', r2_score(y_test, y_test_pred_lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of Ridge on train is 0.811116628961183\n",
      "The r2 score of Ridge on test is 0.7094862292758758\n"
     ]
    }
   ],
   "source": [
    "# 岭回归,L2正则\n",
    "from sklearn.linear_model import RidgeCV\n",
    "rid=RidgeCV(alphas=[1e-3, 1e-2, 1e-1, 1])\n",
    "rid_fit=rid.fit(X_train,y_train)\n",
    "y_test_pred_rid = rid.predict(X_test)\n",
    "y_train_pred_rid = rid.predict(X_train)\n",
    "print ('The r2 score of Ridge on train is', r2_score(y_train, y_train_pred_rid))\n",
    "print( 'The r2 score of Ridge on test is', r2_score(y_test, y_test_pred_rid))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The r2 score of LassoCV on train is 0.8111502419988009\n",
      "The r2 score of LassoCV on test is 0.7084730589857932\n"
     ]
    }
   ],
   "source": [
    "# Lasso回归，L1正则\n",
    "from sklearn.linear_model import LassoCV\n",
    "las=LassoCV(cv=5, random_state=0)\n",
    "las_fit=las.fit(X_train,y_train)\n",
    "y_test_pred_las = las.predict(X_test)\n",
    "y_train_pred_las = las.predict(X_train)\n",
    "print ('The r2 score of LassoCV on train is', r2_score(y_train, y_train_pred_las))\n",
    "print( 'The r2 score of LassoCV on test is', r2_score(y_test, y_test_pred_las))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. 代码中给出了岭回归（RidgeCV）和Lasso（LassoCV）超参数（alpha_）调优的过程，请结合两个最佳模型以及最小二乘线性回归模型的结果，给出什么场合应该用岭回归，什么场合用Lasso，什么场合用最小二乘。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(404, 4)\n",
      "alpha is: 0.1\n"
     ]
    }
   ],
   "source": [
    "# 岭回归,L2正则\n",
    "from sklearn.linear_model import RidgeCV\n",
    "alphas=[1e-3, 1e-2, 1e-1, 1]\n",
    "rid=RidgeCV(alphas=alphas,store_cv_values=True)# 只有当cv=Ｎｏｎｅ时,store_cv_values才能设置为Ｔｒｕｅ\n",
    "rid_fit=rid.fit(X_train,y_train)\n",
    "y_test_pred_rid = rid.predict(X_test)\n",
    "y_train_pred_rid = rid.predict(X_train)\n",
    "cv_result=rid.cv_values_# 在实例化学习模型时，要加上store_cv_values=True，才能使用cv_values_属性。\n",
    "print(cv_result.shape)# 每一行代表每一个样本的mse值，每一列代表每一个对应的alpha所得到的结果。\n",
    "cv_result[:5]\n",
    "print ('alpha is:', rid.alpha_)# rid.alpha_为模型得到的最优参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 画图展示最好的alpha值是不是在mse_mean最小的时候取得的\n",
    "mse_mean = np.mean(rid.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "# 可以看出当mse_mean最小时，alpha等于0.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(100, 5)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([7.52394784e-02, 7.01685893e-02, 6.54394613e-02, 6.10290606e-02,\n",
       "       5.69159062e-02, 5.30799646e-02, 4.95025526e-02, 4.61662463e-02,\n",
       "       4.30547958e-02, 4.01530466e-02, 3.74468657e-02, 3.49230723e-02,\n",
       "       3.25693741e-02, 3.03743073e-02, 2.83271806e-02, 2.64180235e-02,\n",
       "       2.46375371e-02, 2.29770495e-02, 2.14284733e-02, 1.99842659e-02,\n",
       "       1.86373933e-02, 1.73812954e-02, 1.62098542e-02, 1.51173643e-02,\n",
       "       1.40985045e-02, 1.31483125e-02, 1.22621603e-02, 1.14357317e-02,\n",
       "       1.06650017e-02, 9.94621624e-03, 9.27587456e-03, 8.65071166e-03,\n",
       "       8.06768265e-03, 7.52394784e-03, 7.01685893e-03, 6.54394613e-03,\n",
       "       6.10290606e-03, 5.69159062e-03, 5.30799646e-03, 4.95025526e-03,\n",
       "       4.61662463e-03, 4.30547958e-03, 4.01530466e-03, 3.74468657e-03,\n",
       "       3.49230723e-03, 3.25693741e-03, 3.03743073e-03, 2.83271806e-03,\n",
       "       2.64180235e-03, 2.46375371e-03, 2.29770495e-03, 2.14284733e-03,\n",
       "       1.99842659e-03, 1.86373933e-03, 1.73812954e-03, 1.62098542e-03,\n",
       "       1.51173643e-03, 1.40985045e-03, 1.31483125e-03, 1.22621603e-03,\n",
       "       1.14357317e-03, 1.06650017e-03, 9.94621624e-04, 9.27587456e-04,\n",
       "       8.65071166e-04, 8.06768265e-04, 7.52394784e-04, 7.01685893e-04,\n",
       "       6.54394613e-04, 6.10290606e-04, 5.69159062e-04, 5.30799646e-04,\n",
       "       4.95025526e-04, 4.61662463e-04, 4.30547958e-04, 4.01530466e-04,\n",
       "       3.74468657e-04, 3.49230723e-04, 3.25693741e-04, 3.03743073e-04,\n",
       "       2.83271806e-04, 2.64180235e-04, 2.46375371e-04, 2.29770495e-04,\n",
       "       2.14284733e-04, 1.99842659e-04, 1.86373933e-04, 1.73812954e-04,\n",
       "       1.62098542e-04, 1.51173643e-04, 1.40985045e-04, 1.31483125e-04,\n",
       "       1.22621603e-04, 1.14357317e-04, 1.06650017e-04, 9.94621624e-05,\n",
       "       9.27587456e-05, 8.65071166e-05, 8.06768265e-05, 7.52394784e-05])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Lasso回归，L1正则\n",
    "from sklearn.linear_model import LassoCV\n",
    "las=LassoCV(cv=5, random_state=0)\n",
    "las_fit=las.fit(X_train,y_train)\n",
    "y_test_pred_las = las.predict(X_test)\n",
    "y_train_pred_las = las.predict(X_train)\n",
    "las_mse=las.mse_path_\n",
    "print(las_mse.shape)# LassoCV默认的n_alphas参数是100，其结果表示每一个alpha值进行五次交叉验证得到的mse值。\n",
    "las.alphas_ # 随机选择的100个alpha值（即正则参数），默认值eps=1e-3， means that alpha_min / alpha_max = 1e-3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 7.523947836871464e-05\n"
     ]
    }
   ],
   "source": [
    "mses = np.mean(las.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(las.alphas_), mses) \n",
    "#plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()    \n",
    "            \n",
    "print ('alpha is:', las.alpha_)# 最好的mses值所对应的alpha值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "总结：岭回归是加了2范数正则下的最小二乘。当我们的feature之间完全共线性(使有解)或者相关程度异常高(使有稳定解)的时候，适合使用岭回归。另外lasso回归是对参数加了L1正则，能够起到筛选特征的作用。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
